//
//  StatusListViewModel.swift
//  SinaWeibo
//
//  Created by gaoliang on 15/11/16.
//  Copyright © 2015年 gaoliang. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD
import SDWebImage

class StatusListViewModel: NSObject {
    //MARK: 加载微博首页数据
    class func loadData(since_id since_id: Int, max_id: Int,finished: (array: [Status]?) -> ()){
        
        let urlString = "2/statuses/home_timeline.json"
        guard let token = UserAccountViewModel().token else {
            SVProgressHUD.showErrorWithStatus("您暂未登陆")
            return
        }
        
        var parmaters = ["access_token": token]
        
        //若指定参数 则返回ID 比 since_id 大的微博(即比 since_id 时间晚的微博) 默认为 0
        if since_id > 0 {
            //添加 since_id对应键值
            parmaters["since_id"] = "\(since_id)"
        }
        
        // 指定此参数 则返回 ID 小于或等于 max_id 的微博 默认为 0
        if max_id > 0 {
            parmaters["max_id"] = "\(max_id - 1)"
        }
        NetworkingTools.sharedTools.requestJsonDict(.GET, urlString: urlString, parmaters: parmaters) { (result, error) -> () in
            if error != nil {
            // 错误回调
            finished(array: nil)
            return
        }
        
            if let array = result!["statuses"] as? [[String : AnyObject]] {
                
                var list = [Status]()
                //遍历数组
                for item in array {
                    //字典转模型
                    let s = Status(dict: item)
                    //添加微博对象
                    list.append(s)
                }
                //完成回调
                StatusListViewModel.catcheStatusImage(list, finished: finished)
            }
            
        }
    }
    private class func catcheStatusImage(array:[Status],finished:(array:[Status]?) -> ()) {
        // 缓存单张图片
        if array.count == 0 {
            //完成回调
            finished(array: array)
            return
        }
        
        // 创建群组
        let group = dispatch_group_create()
        // 遍历模型数组
        for s in array {
            if let imageurls = s.pictureURLs {
                //如果不是单张图片
                if imageurls.count != 1 {
                    continue
                }
                // 到这里说明一定是单张图片
                for url in imageurls {
                    // 开始下载图片
                    // 异步加载图片的开始
                    // 向群组中添加异步任务
                    dispatch_group_enter(group)
                    SDWebImageManager.sharedManager().downloadImageWithURL(url, options: [], progress: nil, completed: { (_, _, _, _, _) -> Void in
                       
                        // 图片下载完成
                        print("单张图片下载完成")
                        
                        // 异步下载任务结束离开
                        dispatch_group_leave(group)
                        
                    })
                }
            }
        }
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            //在主线程完成回调
            print("所有的异步图片下载完成")
            finished(array: array)
        }
        
    }
}
